import { Injectable } from '@angular/core';
import { map } from 'rxjs/operators';
import { ApiService } from '@core/services/http/api.service';
import { ApesMessageService } from '@shared/apes/message';


@Injectable({
  providedIn: 'root',
})
export class AutopartsApiService {

  constructor(
    private apiService: ApiService,
    private msgService: ApesMessageService,
  ) {
  }


  // 解析vin 或者 epcId
  parseVin(param) {
    return this.apiService.post('autoparts.parseVin', param).pipe(map(((data: any) => {
      if (data && data.data) {
        return data;
      } else {
        this.msgService.error('未解析到对应的EPC编码和EPC版本');
        return {};
      }
    })));
  }


  searchKeyword(param) {
    return this.apiService.post('autoparts.searchKeyword', param).pipe(map((data => {
      if (data && data.data && data.data.length > 0) {
        return data;
      } else {
        this.msgService.error('未找到对应的关键词');
        return {};
      }
    })));
  }


  searchMenuName(param) {
    return this.apiService.post('autoparts.searchMenuName', param).pipe(map((data => {
      if (data && data.data && data.data.length > 0) {
        return data;
      } else {
        this.msgService.error('未找到对应的目录名称');
        return {};
      }
    })));
  }

  getCataLog(param) {
    return this.apiService.post('autoparts.searchCatalog', param).pipe(map((data => {
      if (data && data.data) {
        return data;
      } else {
        this.msgService.error(`未查到对应的epc编码${param.epcId}, epc版本${param.epcVersion} 
                所对应的${param.dataSource === 'OWNER' ? '标准目录' : param.dataSource === 'EPC' ? '原始目录' : '目录'}`);
        return {};
      }
    })));
  }


  getSubgroup(param) {
    return this.apiService.post('autoparts.searchSubgroup', param).pipe(map((data => {
      if (data && data.data) {
        return data;
      } else {
        this.msgService.error(`未查到对应的epc编码${param.epcId}, epc版本${param.epcVersion}, ${param.dataSource === 'EPC' ? '目录编码' : '品类编码'}${param.id} 所对应的子组`);
        return {};
      }
    })));
  }

  getPartsList(param) {
    return this.apiService.post('autoparts.searchPartsList', param).pipe(map((data => {
      if (data && data.data) {
        return data;
      } else {
        this.msgService.error(`未查到对应的epc编码${param.epcId}, epc版本${param.epcVersion}, 上级目录${param.id} 所对应的配件清单`);
        return {};
      }
    })));
  }


  /***
   * 推送代办
   * @param param
   */
  sendPartsParseToDo(param) {
    return this.apiService.post('autoparts.searchPartsForDataCenterDailyResolve', param).pipe(map((data => {
      if (data && data.message) {
        this.msgService.success('推送消息成功', {
          apesDuration: 5000,
        });
        return data;
      } else {
        this.msgService.error('推送消息失败');
        return {};
      }
    })));
  }

  /***
   * 保存为原始ERP单据
   * @param param
   */
  saveAsNativeForm(param) {
    return this.apiService.post('autoparts.epcPartNumberParse.create', param).pipe(map((data => {
      if (data) {
        return data;
      } else {
        return {};
      }
    })));
  }


  /***
   * 查询配置车型信息
   */
  searchVehicleConfiguration(param) {
    return this.apiService.post('autoparts.searchVehicleConfig', param).pipe(map((data => {
      if (data) {
        return data;
      } else {
        this.msgService.error('未找到对应的配置车型信息，配置车型编码：' + param.vehicleConfig);
        return {};
      }
    })));
  }

  /***
   * 更新配件编译标记
   * @param param
   */
  updateParseSign(param) {
    return this.apiService.post('autoparts.updateParseSign', param).pipe(map((data => {
      if (data && data.message) {
        this.msgService.success("推送处理消息成功", { apesDuration: 4000 });
        return data;
      } else {
        this.msgService.error('推送处理消息失败');
        return {};
      }
    })));
  }


}
